#ifndef QUERY_H_
#define QUERY_H_

#include <stdlib.h>
#include <stdio.h>
#include <cstring>
#include "../utils/Functions.h"
#include "../utils/Constantes.h"

using std::vector;
using std::ifstream;
using std::ofstream;

using namespace convertTypes;

class Query {
private:
	ifstream* indexFile;
	ifstream* dataFile;
	ifstream* FCFile;
	ifstream* pointersFile;
	ifstream* namesTable;
	unsigned int wordsNumber;
	unsigned int pointerData;
	unsigned int pointerWord;
	vector <Register>* v_registers;

	/**
	 * avanza en el archivo que contiene los nombres de los documentos
	 * tantos como diga el parametro.
	 * Deja posicionado para que se lea afuera de la función el numero de doc y el nombre
	 */
	void advanceNDocumentsNames(int);
	vector<Data>* getDataFromDataFile();
	vector <unsigned int>* getPosiciones(vector<Data>* v_query, int document);
public:
	vector<Data>* busquedaBinaria(string token);
	Query(string);
	~Query();
	vector <Match>* resolveQuery (vector<QueryToken>* v_query);
	void fillDatas(vector<QueryToken>* query);
	void printDocumentsNames(vector<unsigned int>*);
	void printDocumentsNames(vector<Match>*);
};

#endif /* QUERY_H_ */
